1. General Comments

The following are notes from the testing event. Vendors are flagged as A, B, C, etc. to keep the details private, but to reflect the kinds of problems noted during testing.

The following table is the testing script used for CalDAV testing. Comments below will make reference to the numbers corresponding to this table.

Table 1 — CalDAV Testing Scenarios

1.

Event creation.

1.1.

Create new single-instance meeting titled “Meeting 1.1” with the location “Durham”.

1.2.

Create new meeting titled “Meeting 1.2” recurring every Monday from 10:00 AM to 11:00 AM for 4 weeks.

1.3.

Create new single-instance meeting titled “Meeting 1.3” with 2 other attendees.

1.4.

Create new single-instance meeting titled “Meeting 1.4” with an alarm set to trigger 15 minutes prior to the schedule time of the meeting.

2.

Event modification

2.1.

Modify the title of meeting “Meeting 1.1” to “Meeting 1.1bis”.

2.2.

Modify the location of the meeting “Meeting 1.1bis” to “Seattle bis”.

2.3.

Reschedule meeting “Meeting 1.1bis” to the next day.

2.4.

Add an attendee to “Meeting 1.1bis”.

2.5.

Add an alarm to “Meeting 1.1bis”.

2.6.

Modify the title of the 1st instance of the recurring meeting created in 1.2.

2.7.

Modify the participation status of the 1st attendee in meeting 1.3 to DECLINED.

2.8.

Cancel the 4th instance of the recurring meeting created in 1.2.

2.9.

One client changes “Meeting 1.1bis” to a different time, second client ‘refreshes’ its display to see the modification.

3.

Event retrieval

3.1.

calendar-query REPORT

3.1.1.

No filtering (match everything)

3.1.1.1.

Query all components and return all data. (tests <calendar-query> and <filter>)

3.1.1.2.

Query all components and return ETag WebDAV property and all data. (tests <calendar-query>+<DAV:prop> and <filter>)

3.1.1.3.

Query all components and return just entire VEVENT components. (tests <calendar-query>, <filter>+<comp-filter>)

3.1.1.4.

Query all components and return VEVENT components with only DTSTART, DTEND/DURATION, SUMMARY, UID, SEQUENCE, RRULE, RDATE, EXRULE, EXDATE, RECURRENCE-ID. (tests <calendar-query>, <filter><comp-filter>`, `<calendar-data><comp>+<prop>)

3.1.2.

time-range filtering

3.1.2.1.

Query all components within a one day time-range and return all data. Make sure that there is a recurring event that starts prior to the chosen time-range but has one non-overridden instance within the time-range. (tests <calendar-query>, <filter>+<time-range>)

3.1.2.2.

Query all components within a one week time-range and return just entire VEVENT components. Make sure that there is a recurring event that starts prior to the chosen time-range but has one overridden instance within the time-range. (tests <calendar-query>, <filter>+<time-range>)

3.1.3.

component based filtering

3.1.3.1.

Query all components that contain an embedded VALARM component. (tests <calendar-query>, <filter>+<comp-filter>)

3.1.3.2.

Query all components that contain an embedded VALARM component whose trigger falls within a specific time-range. (tests <calendar-query>, <filter><comp-filter><prop-filter>+<time-range>)

3.1.4.

property based filtering

3.1.4.1.

Query all components that contain any ORGANIZER property. (tests <calendar-query>, <filter><prop-filter><is-defined>)

3.1.4.2.

Query all components that contain an ORGANIZER property with a specific CUA text value case-insensitively. (tests <calendar-query>, <filter><prop-filter><text-match>+<caseless>)

3.1.4.3.

Query all components that contain an ORGANIZER property with a specific CUA text value case-senstively. (tests <calendar-query>, <filter><prop-filter><text-match>+<caseless>)

3.1.5.

parameter based filtering

3.1.5.1.

Query all components that contain a DTSTART property with a TZID parameter. (tests <calendar-query>, <filter><prop-filter><text-match><param-filter><is-defined>)

3.1.5.2.

Query all components that contain an ATTENDEE property with PARTSTAT=NEEDS-ACTION parameter. (tests <calendar-query>, <filter><prop-filter><text-match><param-filter><text-match>)

3.2.

calendar-multiget REPORT

3.2.1.

Query a specific href and return all data. (tests <calendar-multiget>)

3.2.2.

Query multiple hrefs (some of which do not exist) and return all data. (tests <calendar-multiget>)

3.2.3.

Query a specific href and return ETag WebDAV property and all data. (tests <calendar-multiget>+<DAV:prop>)

3.2.4.

Query multiple hrefs (some of which do not exist) and return ETag WebDAV property and all data. (tests <calendar-multiget>+<DAV:prop>)

3.2.5.

Query a specific href and return VEVENT components with only DTSTART, DTEND/DURATION, SUMMARY, UID, SEQUENCE, RRULE, RDATE, EXRULE, EXDATE, RECURRENCE-ID. (tests <calendar-query>, <calendar-data><comp><prop>)

3.2.6.

Query multiple hrefs (some of which do not exist) and return VEVENT components with only DTSTART, DTEND/DURATION, SUMMARY, UID, SEQUENCE, RRULE, RDATE, EXRULE, EXDATE, RECURRENCE-ID. (tests <calendar-query>, <calendar-data><comp><prop>)

4.

Event deletion

4.1.

Delete a single non-recurring meeting.

4.2.

Delete a single recurring meeting with no overridden instances.

4.3.

Delete a single recurring meeting with overridden instances.

4.4.

Delete a non-overridden instance of a recurring meeting.

4.5.

Delete an overridden instance of a recurring meeting.

5.

Access Control

5.1.

View access control details on current user’s main calendar.

5.2.

Change access control details on current user’s main calendar to add another user with read-only access. Verify that other user can view the calendar but not change it.

5.3.

Change access control details on current user’s main calendar to add another user with read-write access. Verify that other user can view the calendar and change it. Verify that changes done by one user are seen by the other.

5.4.

Remove another user’s access to the current user’s main calendar and verify they can no longer access the calendar.

6.

Calendar Management

6.1

Browse the list of calendars on the server, including the current user’s personal calendars.

6.2

Create a new calendar in the current user’s personal calendar space.

6.3

Create a regular collection in the current user’s personal calendar space.

6.4

Create a new calendar inside the collection created in 6.3.

6.5

Delete the calendar created in 6.2.

6.6

Delete the collection created in 6.3.

7.

Free Busy Reports

Setup

Create a new calendar and populate it with the following for one week:

Event on Monday, 9 am — 11 am, recurs every day for five times
Event on Monday, 12 pm — 1 pm, status tentative
Event on Monday, 2 pm — 3 pm, status cancelled
Event on Tuesday, 11 am — 12 pm
Event on Tuesday, 2 pm — 4 pm, recurs every day for four times
Event on Tuesday, 3 pm — 5 pm
Event on Wednesday, 11 am — 12 pm, status tentative
Event on Wednesday, 3 pm — 5 pm, status tentative
Event on Thursday, 11 am — 12 pm, status cancelled
Event on Thursday, 3 pm — 5 pm, status cancelled

7.1

Run a free-busy report for the entire week.

7.1.1

Verify two FREEBUSY periods for Monday, the second is BUSY-TENTATIVE.

7.1.2

Verify two FREEBUSY periods for Tuesday.

7.1.3

Verify four FREEBUSY periods for Wednesday, second and fourth are BUSY-TENTATIVE and one hour long.

7.1.4

Verify two FREEBUSY periods for Thursday.

7.1.5

Verify two FREEBUSY periods for Friday.

8.

Scheduling

Setup

Three user accounts user1 (role Organizer), user2 (role Attendee), user3 (role Attendee) provisioned with suitable principal properties for calendar home, inbox, outbox and user addresses.

8.1

Organizer (user1) sends non-recurring message invite for Monday at 9am (1 hour) to each attendee. Verify that each attendee Inbox receives a copy of the invite.

8.2

Attendee (user2) accepts invite and sends back reply. Verify that reply is placed in Organizer Inbox.

8.3

Organizer (user1) updates invite with user2 accept state and resends invite. Verify that each attendee Inbox receives a copy of the new invite.

8.4

Attendee (user3) accepts updated invite and sends back reply. Verify that reply is placed in Organizer Inbox.

8.5

Organizer (user1) updates invite with user3 accept state and resends invite. Verify that each attendee Inbox receives a copy of the new invite.

8.6

Organizer (user1) cancels the invite. Verify that each attendee Inbox receives the cancellation.